package com.vdong.common.oauth.service;

import com.vdong.common.oauth.common.enums.AuthorizeTypeEnum;
import com.vdong.common.oauth.entity.dto.PayConfigDTO;
import com.vdong.common.oauth.entity.dto.WechatAuthorizerInfoVO;
import com.vdong.common.oauth.entity.mo.WechatAuthorizerInfo;
import org.springframework.stereotype.Service;


public interface WechatAuthorizerInfoService {
    /**
     * 新版店铺保存授权信息 支持小程序/公众号（授权回调）
     *
     * @param storeId
     * @param authCode
     * @param authorizeType 1=公众号,2=小程序
     * @return
     */
    Boolean saveAuthInfo(Long storeId, String authCode, AuthorizeTypeEnum authorizeType);

    /**
     * 新版保存授权信息 支持小程序/公众号 （消息推送）
     *
     * @param appId
     * @param authCode
     * @return
     */
    Boolean saveAuthInfo(String appId, String authCode);

    /**
     * 公众号或小程序取消授权
     */
    Boolean unauthorized(String appId);

    /**
     * 获取授权信息
     *
     * @param appId
     * @return
     */
    WechatAuthorizerInfo loadByAppid(String appId);

    /**
     * 获取店铺微信小程序授权信息
     *
     * @param storeId
     * @return
     */
    WechatAuthorizerInfo loadByStoreId(Long storeId);

    /**
     * 根据授权类型获取店铺授权信息
     *
     * @param storeId
     * @param authorizeType
     * @return
     */
    WechatAuthorizerInfo loadByStoreId(Long storeId, AuthorizeTypeEnum authorizeType);

    /**
     * 判断该店铺小程序是否授权
     *
     * @param storeId
     * @return
     */
    Boolean isAuth(Long storeId);

    /**
     * 判断该店铺是否授权
     *
     * @param storeId
     * @param authorizeType
     * @return
     */
    Boolean isAuth(Long storeId, AuthorizeTypeEnum authorizeType);

    /**
     * 根据授权类型获取店铺授权信息
     *
     * @param storeId
     * @param authorizeType
     * @return
     */
    WechatAuthorizerInfoVO getAuthorizerInfo(Long storeId, AuthorizeTypeEnum authorizeType);

    /**
     * 解绑公众号
     *
     * @param appId
     * @param phone         手机号
     * @param code          验证码
     * @return
     */
    Boolean unbundAuthorizerInfo(String appId, String phone, String code);

    /**
     * 解绑
     * @param appId
     * @return
     */
    Boolean deleteAuth(String appId);

    /**
     * 设置支付
     * @param payConfigDTO
     * @return
     */
    Boolean savaOrUpdatePay(PayConfigDTO payConfigDTO);

    /**
     * 查询支付参数
     * @return
     */
    PayConfigDTO selectPayConfig();

}

